package matheus.tp01cg.objetosdedesenho;

public final class FabricaDeObjetoDeDesenho {

	public static enum AlgoritmosReta {
		DDA, BRESENHAM
	}

	public AlgoritmosReta algoritmoReta = AlgoritmosReta.DDA;

	public FabricaDeObjetoDeDesenho(AlgoritmosReta algoritmoReta) {
		this.algoritmoReta = algoritmoReta;
	}

	public Retangulo createRetangulo(Coords a, Coords b, int corBorda,
			int corPreenchimento) throws Exception {
		switch (algoritmoReta) {
		case DDA:
			return new RetanguloDDA(a, b, corBorda, corPreenchimento);
		case BRESENHAM:
			return new RetanguloBresenham(a, b, corBorda, corPreenchimento);
		}
		return null;
	}

	public Retangulo createRetangulo(Coords p, int largura, int altura,
			int corBorda, int corPreenchimento) throws Exception {
		switch (algoritmoReta) {
		case DDA:
			return new RetanguloDDA(p, largura, altura, corBorda,
					corPreenchimento);
		case BRESENHAM:
			return new RetanguloBresenham(p, largura, altura, corBorda,
					corPreenchimento);
		}
		return null;
	}

	public Poligono createPoligono(int corBorda, int corPreenchimento) {
		switch (algoritmoReta) {
		case DDA:
			return new PoligonoDDA(corBorda, corPreenchimento);
		case BRESENHAM:
			return new PoligonoBresenham(corBorda, corPreenchimento);
		}
		return null;
	}

	public Reta createReta(Coords pontoInicial, Coords pontoFinal, int cor) {
		switch (algoritmoReta) {
		case DDA:
			return new RetaDDA(pontoInicial, pontoFinal, cor);
		case BRESENHAM:
			return new RetaBresenham(pontoInicial, pontoFinal, cor);
		}
		return null;
	}

	public Circunferencia createCircunferencia(Coords centro, int raio,
			int corBorda, int corPreenchimento) {
		return new Circunferencia(centro, raio, corBorda, corPreenchimento);

	}

	public Circunferencia createCircunferencia(Coords centro, int raio,
			int corBorda, int corPreenchimento, Coords limMin, Coords limMax) {
		return new Circunferencia(centro, raio, corBorda, corPreenchimento,
				limMin, limMax);
	}
}
